PICWWを使ってみよう!
MPLABで作成したオブジェクトファイル(HEXファイル)をPICWWを使って書き込んでみましょう。ここでは、すでにPICWWを使ったターゲットボードの調整や、オプション(O)の書き込み設定(W)...が正しくできていることを前提とします。PICWW.EXEをクリックすると、図1のようにPICWWが立ち上がります。デフォルトは、「PIC16F84」となっていますので、「PIC16F877」を選択します。また、その右隣の空欄は「PIC」を選択します。
![]() |
図1. PICWWのメイン画面 |
ここで、プログラム(P)のHEXファイルを開く(O)...クリックするとファイル名を入力する画面が開きます。前回、MPLABで生成したHEXファイル名(ここの例では、spectrum.hex
)を指定してやると、図2のように新規プログラムの欄にHEXファイルの内容が表示されます。
![]() |
図2. PICWWに表示されたHEXファイルの内容 |
それでは、ターゲットボードのゼロプレッシャーソケットにPIC16F877を装着してください。ただし、PICの脱着時には、電源を必ず切っておきます。
イレースチェック
まず、デバイス(I)のイレース・チェック(T)をクリックしてみてください。新しいPICを使っていれば、図3のように「イレースされています」というメッセージが出るはずです。もし、書き込みがされていないPICで「イレースされていません」というメッセージが出たら、PICとターゲットボードとの接続をもう一度チェックしてください。
![]() |
![]() |
図3. イレースチェックの結果表示 |
プログラムの書き込み開始
それでは、いよいよ書き込みをします。プログラム(P)のプログラムの書き込み(W) をクリックするか、もしくはキーボードの「F6」を押してみてください。図4のように書き込み確認のメッセージがでますので、はい(Y)をクリックすると書き込みが開始されます。
![]() |
図4. 書き込みの確認 |
正常に書き込みが進行している時は、「書き込み中」という表示が出ています。正常に終了すると図5のような「書き込み完了」のメッセージが表示されますので、「OK」をクリックします。もし、図6のような書き込み失敗のメッセージが表示されたら、PICWWの書き込み設定でWAITをより大きくして、もう一度書き込みをしてみましょう。WAITを大きくしても書き込みに失敗する場合には、PICとターゲットボードとの接続をもう一度チェックしてください。書き込みに失敗したアドレスとデータが分かるようになっています。
![]() |
![]() |
図5.書き込み完了の表示 | 図6.書き込み失敗の表示 |
コンペアによる確認
ここで念のため、HEXファイルの内容と、書き込まれたPICの内容が一致しているかどうかの確認をします。プログラム(P)のコンペア(C)を実行します。コンペアの結果ですが、一致した場合には図7のようなメッセージが表示され「OK」をクリックして完了です。もし、一致しなかった場合には図8のようなメッセージが表示されます。メッセージには一致していない最初のアドレスと比較データが分かるようになっています。
![]() |
![]() |
図7. 一致した結果 | 図8. 一致しなかった結果 |
コンフィグレーションの書き込み
次に、コンフィグレーションの書き込みを行います。PICには、通常のプログラムメモリとは全くアドレスの異なるところに2種類の特殊なメモリがあります。一つはIDワードで、もう一つはコンフィグレーションビットです。デバイス(I)のコンフィグの書き込み(C)で図9のコンフィグレーションの設定画面が開きます。
IDの書き込みですが、7文字以内の英数字を記入します。このIDワードと呼ばれる特殊メモリ領域は2000Hから2003H番地にある4ワード(1ワード=14ビット)の領域で、通常のプログラム実行中には読み書きできないものです。ライターでプログラムを書き込むときに、読み書き可能です。
これは、あっても無くても構いません。IDレジスタの使い方は自由となっており、あなた次第です。一般的に、プログラム作成年月日、バージョン、プログラム管理用番号などを書いておくとよいでしょう。ここでの例は、「PORT B」という名前(ID)をつけています。
![]() |
図9. コンフィグレーションの設定 |
オシレータの詳細は表1を参照してください。発振回路を形成するのに使うPIC内部の回路には4種類の発振モードがあり、接続する振動子の種類によって表1のように使い分けます。通常は「HS」にします。
モード | 説明 | 発振周波数範囲 | 特徴 |
LP | 低電力/水晶発振 (Low Power X'tal) |
200kHz以下 | 極低消費電力動作が可能 |
XT | 水晶/セラミック発振 (X'tal/Resonator) |
4MHz以下 | 標準的 |
HS | 高周波水晶/セラミック発振 (High Speed X'tal/Resonator) |
4MHz〜20MHz | 高速動作 |
RC | nowrapRC発振 (Resister/Capacitor) |
約1MHz以下 (4MHzもあり) |
周波数精度は悪いが安価 |
次に各PICのコンフィグレーションビットの機能について設定します。
(1)パワーアップタイマー:
電源投入時に、電源電圧が安定になるまでタイマーをかけて、確実にPICが動作するようにする機能です。PWRTともいいます。ここをチェックし、パワーアップタイマーの機能を使います。
(2)ブラウンアウトリセット:
PICの動作中に突然電源が切れたり電圧が低下したりしたときに、PICが誤動作して外部に余計な信号を出さないように、PICの動作を停止させる機能です。BORともいいます。ここをチェックし、ブラウンアウトリセットの機能を使います。
(3)低電圧プログラミング許可:
PIC16F87Xは、+5Vの低電圧でも書き込みできる機能がありますが、RB3が低電圧プログラミング専用のポートとなるため、低電圧プログラミングではRB3が使えなくなります。
このターゲットボードは+13Vで書き込みをするため、低電圧プログラミングの許可を設定しても無意味です。ここのチェックをはずし、低電圧プログラミング許可は使用しません。
(4)プログラムメモリ書き込み許可:
EEPROMエリアのデータメモリのプロテクト指定です。EEPROMに書き込みしても問題がなければチェックします。
(5)デバッガ許可:
PIC16F87Xは、MPLAB 使用の際に簡単なインサーキットデバッガ機能が使えるようになっていますが、ここでは使用しません。
(6)ウオッチドッグタイマー:
ウオッチドッグタイマーは、PICのプログラムの異常を常に監視して、万一異常になったときには、初期スタートから再開させて正常な状態に戻す働きをします。WDTともいいます。ここでは使用しません。
図10は、PIC16F877のコンフィギュレーションビット(レジスタ:CONFIG,アドレス2007h)について示しています。コンフィグレーションビットは、1ワード(14ビット)で構成されています。コンフィグレーションビットは、プログラム実行中には読み書きできない特殊なメモリで、書き込みはライターで行います。このビットは、PICの基本的な動作状態の指定や、プログラムにプロテクトを書けて読み出しても中身が分からないようにするなどの設定をするビットとなっています。この特殊領域のアドレスは、2007hとなっていますが、ビットの位置や内容はデバイスによって異なっています。
![]() |
図10. PIC16F877のコンフィギュレーションビット |
コンフィグレーションビットの種類と意味を表2にまとめてみました。
「参考文献: MICROCHIP社 PIC16F87X データシート」
bit | 記号 | 名称 | 値 | 内容 | MPLAB パラメータ |
13,12 | CP1,CP0 | フラッシュプログラムメモリ コードプロテクションビット (注2) |
00 | 0000h から1FFFh を コードプロテクション |
_CP_ALL |
01 | 1000h から1FFFh を コードプロテクション |
_CP_HALF | |||
5,4 | 10 | 1F00h から1FFFh を コードプロテクション |
_CP_UPPER_256 | ||
11 | コードプロテクションなし | _CP_OFF | |||
11 | DEBUG | インサーキットデバッガモード | 0 | インサーキットデバッガにする (RB6 とRB7 はデバッガ専用ピン) |
_DEBUG_ON |
1 | インサーキットデバッガモードにしない (RB6とRB7 は汎用I/O ピン) |
_DEBUG_OFF | |||
10 | − | − | − | 機能なし 「1」としてリードする | − |
9 | WRT | フラッシュプログラム メモリライトイネーブル |
1 | プロテクトされていないプログラム メモリは、EECONコントロールによる ライトが可能 |
_WRT_ENABLE_ON |
0 | プロテクトされていないプログラム メモリは、EECONコントロールによる ライトが不可能 |
_WRT_ENABLE_OFF | |||
8 | CPD | データEE メモリコードプロテクト | 0 | データEEPROM メモリを コードプロテクトする |
_CPD_ON |
1 | コードプロテクトしない | _CPD_OFF | |||
7 | LVP | 低電圧プログラミング イネーブルビット |
1 | RB3/PGM ピンにはPGM 機能があり、 低電圧プログラミングが可能にする |
_LVP_ON |
0 | RB3 はディジタルI/O で、 プログラミングには MCLRに高電圧を使用する |
_LVP_OFF | |||
6 | BODEN | ブラウンアウトリセット イネーブルビット(注1) |
1 | BOR を動作させる | _BODEN_ON |
0 | BOR を動作させない | _BODEN_OFF | |||
3 | PWRTE | パワーアップタイマ イネーブルビット(注1) |
1 | PWRT を動作させない | _PWRTE_OFF |
0 | PWRT を動作させる | _PWRTE_ON | |||
2 | WDTE | ウォッチドッグタイマ イネーブルビット |
1 | WDT を動作させる | _WDT_ON |
0 | WDT を動作させない | _WDT_OFF | |||
1,0 | FOSC1,FOSC0 | オシレータセレクションビット | 00 | LP オシレータ | _LP_OSC |
01 | XT オシレータ | _XT_OSC | |||
10 | HS オシレータ | _HS_OSC | |||
11 | RC オシレータ | _RC_OSC |
(注1)ブラウンアウトリセットをイネーブルにすると、ビットPWRTE
の値に関係なく自動的にパワーアップタイマ(PWRT)がイネーブルになります。ブラウンアウトリセットがイネーブルの時は常にパワーアップタイマをイネーブルにします。
(注2)CP1:CP0 ペアのすべてに同じ値を入力して、リスト上のコードプロテクションをイネーブルにします。
PICの動作確認
コンフィグの書き込みが完了すると、MCLRによるリセットが自動的にかかって、PICが動作します。図11は、RBポートのLEDを点灯させるプログラムを書き込んで、動作を確認したところです。
![]() |
![]() |
図11(a).書き込み前 | 図11(b).書き込み後 |
![]() |
|
![]() |